package fwmpc.service;

import fwmpc.resource.IWeiXinAttributeItem;

import javax.net.ssl.SSLContext;
import java.math.BigDecimal;
import java.util.Map;

/**
 * 接口描述:  微信订单应用处理Service接口
 *
 * @author 王雷
 * @version 1.0.0
 * @date 2021/1/21 0021 上午 10:46
 */
public interface IWeiXinOrderManagerService {

    /**
     * 功能描述：获取默认的AppId
     *
     * @date : 2022/8/4 0004 下午 1:40
     */
    String giveDefaultAppid();

    /**
     * 功能描述：统一支付处理——小程序
     *
     * @param appId          微信标识
     * @param totalFee       支付金额；
     * @param bodyValue      产品说明
     * @param outTradeNo     订单编号
     * @param spbillCreateIp 发起者IP
     * @param openId         支付者OpenId
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2021/1/21 0021 上午 11:37
     */
    Map<String, String> unifiedAppletsPaymentProcessing(String appId, BigDecimal totalFee, String bodyValue, String outTradeNo
            , String spbillCreateIp, String openId) throws Exception;

    /**
     * 功能描述：统一支付处理——小程序
     *
     * @param appId          微信标识
     * @param platformId     平台标识
     * @param totalFee       支付金额；
     * @param bodyValue      产品说明
     * @param outTradeNo     订单编号
     * @param spbillCreateIp 发起者IP
     * @param openId         支付者OpenId
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2021/1/21 0021 上午 11:37
     */
    Map<String, String> unifiedAppletsPaymentProcessing(String appId, Long platformId, BigDecimal totalFee, String bodyValue, String outTradeNo
            , String spbillCreateIp, String openId) throws Exception;

    /**
     * 功能描述：统一支付处理——Web-H5
     *
     * @param appId          平台标识
     * @param totalFee       支付金额；
     * @param bodyValue      产品说明
     * @param outTradeNo     订单编号
     * @param spbillCreateIp 发起者IP
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2021/1/21 0021 上午 11:37
     */
    Map<String, String> unifiedAppletsPaymentProcessingByWeb(String appId, BigDecimal totalFee, String bodyValue, String outTradeNo
            , String spbillCreateIp) throws Exception;

    /**
     * 功能描述：统一支付处理——Web-H5
     *
     * @param appId          微信标识
     * @param platformId     平台标识
     * @param totalFee       支付金额；
     * @param bodyValue      产品说明
     * @param outTradeNo     订单编号
     * @param spbillCreateIp 发起者IP
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2021/1/21 0021 上午 11:37
     */
    Map<String, String> unifiedAppletsPaymentProcessingByWeb(String appId, Long platformId, BigDecimal totalFee, String bodyValue, String outTradeNo
            , String spbillCreateIp) throws Exception;

//    /**
//     * 功能描述：统一退款处理——小程序
//     *
//     * @param appId         平台标识
//     * @param refundFee     退款金额；
//     * @param totalFee      订单支付总金额；
//     * @param outRefundNo   支付单号；
//     * @param transactionId 微信支付单号
//     * @param sslContext    CA拓展对象；
//     * @throws Exception 处理异常
//     * @author : 王雷
//     * @date : 2022/7/19 0019 上午 11:12
//     */
//    Map<String, String> unifiedRefundProcessing(String appId, BigDecimal refundFee, BigDecimal totalFee
//            , String outRefundNo, String transactionId, SSLContext sslContext) throws Exception;

    /**
     * 功能描述：统一退款处理——小程序
     *
     * @param appId         平台标识
     * @param refundFee     退款金额；
     * @param totalFee      订单支付总金额；
     * @param outRefundNo   支付单号；
     * @param transactionId 微信支付单号
     * @param sslContext    CA拓展对象；
     * @param mchId         商户号；
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2022/7/19 0019 上午 11:12
     */
    Map<String, String> unifiedRefundProcessing(String appId, BigDecimal refundFee, BigDecimal totalFee
            , String outRefundNo, String transactionId, SSLContext sslContext, String mchId) throws Exception;


    /**
     * 功能描述：根据条件获取支付数据
     *
     * @param appId    平台标识
     * @param totalFee 涉及的金额；
     * @param mchId    商户号
     * @return 商户对象
     * @throws Exception 处理异常
     * @date : 2022/11/17 0017 下午 4:53
     */
    IWeiXinAttributeItem.MchDataBean giveMchDataBean(String appId, BigDecimal totalFee, String mchId) throws Exception;

    /**
     * 功能描述：提现
     *
     * @param appId        平台标识
     * @param openId       顾客OpenId
     * @param paymentTotal 付款金额
     * @param orderNo      付款编号
     * @throws Exception 处理异常
     * @date : 2022/9/24 0024 下午 3:41
     */
    Map<String, String> withdrawProcessing(String appId, String openId, BigDecimal paymentTotal, String orderNo
            , SSLContext sslContext) throws Exception;

    /**
     * 功能描述：统一退款处理-内置证书加载——小程序
     *
     * @param appId         平台标识
     * @param refundFee     退款金额；
     * @param totalFee      订单支付总金额；
     * @param outRefundNo   支付单号；
     * @param transactionId 微信支付单号
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2022/7/19 0019 上午 11:12
     */
    Map<String, String> unifiedRefundProcessingBuiltInCertificateLoading(String appId, BigDecimal refundFee, BigDecimal totalFee
            , String outRefundNo, String transactionId) throws Exception;

    /**
     * 功能描述：统一退款处理-内置证书加载——小程序
     *
     * @param appId         平台标识
     * @param refundFee     退款金额
     * @param totalFee      订单支付总金额
     * @param outRefundNo   支付单号
     * @param transactionId 微信支付单号
     * @param mchId         商户号
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2022/7/19 0019 上午 11:12
     */
    Map<String, String> unifiedRefundProcessingBuiltInCertificateLoading(String appId, BigDecimal refundFee
            , BigDecimal totalFee, String outRefundNo, String transactionId, String mchId) throws Exception;

    /**
     * 功能描述：统一提现处理-内置证书加载——小程序
     *
     * @param appId        平台标识
     * @param openId       顾客OpenId
     * @param paymentTotal 付款金额
     * @param orderNo      付款编号
     * @return 处理结果
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2022/7/19 0019 上午 11:12
     */
    Map<String, String> unifiedWithdrawProcessingBuiltInCertificateLoading(String appId, String openId
            , BigDecimal paymentTotal, String orderNo) throws Exception;

    /**
     * 功能描述：订单关闭处理
     *
     * @param appId     平台标识
     * @param orderNum  订单编号
     * @param mchId     支付ID
     * @param mchSecret 支付密钥
     * @param payTotal  订单金额
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2022/7/19 0019 上午 11:12
     */
    String orderClosureProcessing(String appId, String orderNum, String mchId
            , String mchSecret, BigDecimal payTotal) throws Exception;

    /**
     * 功能描述：订单关闭处理
     *
     * @param appId    平台标识
     * @param orderNum 订单编号
     * @param payTotal 订单金额
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2022/7/19 0019 上午 11:12
     */
    String orderClosureProcessing(String appId, String orderNum, BigDecimal payTotal) throws Exception;

    /**
     * 功能描述：微信换取支付链接处理
     *
     * @param appId 标识
     * @throws Exception 处理异常
     * @author : 王雷
     * @date : 2021/1/21 0021 上午 11:37
     */
    String givePaymentLink(String appId) throws Exception;
}
